<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>

</html>
<script>
    //一.函数的创建
    // ECMAScript 中的函数使用 function 关键字来声明，后跟一组参数以及函数体。
    // 1.声明式： 普通函数，一定有函数名称。
    // function 函数名称() {
    //     函数体
    // }

    //function 定义函数的关键字，createTable函数名称  ():参数,传递值,扩展函数的功能
    //创建表格的函数。
    //函数如果不调用，理解成此函数不存在一样。
    // function createTable(x, y) {
    //     document.write('<table border=1>');
    //     var i = 1;
    //     while (i <= x) {
    //         document.write('<tr>');

    //         var j = 1;
    //         while (j <= y) {
    //             document.write('<td>11111</td>');
    //             j++;
    //         }

    //         document.write('</tr>');
    //         i++;
    //     }
    //     document.write('</table>');
    // }

    // 函数调用,使用:允许在声明的前后进行调用,重复调用。
    // 格式：函数名()
    // createTable(4, 5);
    // createTable(6, 6);

    //2.赋值式：函数表达式- 匿名函数。
    // createTable(); //undefined() 这里不能调用，因为变量前置访问是undefined
    // var createTable = function() {
    //     document.write('<table border=1>');
    //     var i = 1;
    //     while (i <= 5) {
    //         document.write('<tr>');
    //         var j = 1;
    //         while (j <= 5) {
    //             document.write('<td>11111</td>');
    //             j++;
    //         }
    //         document.write('</tr>');
    //         i++;
    //     }
    //     document.write('</table>');
    // };

    // createTable();
    // createTable();

    // 3.赋值式:自执行函数 - 声明和调用写到一起，只能执行一次。
    // 函数名等于函数指针(函数整个代码)
    // function fn() {
    //     console.log('我是函数体');
    // }

    // fn();

    //通过括号将整个函数声明变成函数表达式。
    // (function() {
    //     console.log('我是函数体');
    // })();

    //有很多的符号将函数结构转换成表达式。! ~ + -
    // ! function () {
    //     console.log('我是函数体');
    // }();

    // 4.赋值式:事件处理函数,将函数体(函数名等同于函数体)给事件，由事件进行调用。
    // function fn() {
    //     console.log('我是给事件使用的');
    // }
    // document.onclick = fn; //当点击document调用fn函数。
    // document.onclick = fn(); //这是错误的写法，因为函数已经调用了。

    // document.onclick = function() {
    //     console.log('我是给事件使用的');
    // };


    //总结：
    //函数创建的方式
    //1.声明式 - 有名函数
    //2.赋值式(将函数体赋值给变量,自执行函数,事件处理函数) - 匿名函数

    //函数的调用
    //通过函数名进行调用。
    //普通声明式函数，可以反复，前后调用。
</script>